#include<iostream>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

#define NUM 1024
 void Write(int wfd)//写的文件描述符
 {
     char buffer[NUM];
     int self=getpid();
     string s="我是child，我写数据 ";
    //  int num=0;
    //  while(true)
    //  {
    //   buffer[0]=0;
    //   sleep(1);
    //   snprintf(buffer,NUM,"%s-%d-%d",s.c_str(),self,++num);  
    //   write(wfd,buffer,strlen(buffer));//不读 '\0'
    //  }
    // int cnt=5;
    //  while(cnt)
    //  {
    //   buffer[0]=0;
    //   sleep(1);
    //   snprintf(buffer,NUM,"%s-%d-%d",s.c_str(),self,cnt--);  
    //   write(wfd,buffer,strlen(buffer));//不读 '\0'
    //  }
 }

using namespace std;
int main()
{
     int pipeid[2];
    pipe(pipeid);
    close(0);
    int pid=fork();
    
    if(pid==0)//child
    {
        close(pipeid[0]);//关闭读管道
        Write(pipeid[1]);//写到管道里
        close(pipeid[1]);
         exit(1);
    }
    else//father
    {
     char buffer[NUM];
     close(pipeid[1]);//关闭写管道
     
     while(true)
     {
      buffer[0]=0;
     int size=read(pipeid[0],buffer,sizeof(buffer));
     
      if(size>0)
      {
       buffer[size]='\0';
       cout << "father get a message[" << getpid() << "]# " << buffer<<endl;
     }
      else if(size==0)
      {
        cout<<"已经读完了"<<endl;
        break;
      }
      else break;
     }

    // buffer[0]=0;
    //  int size=read(pipeid[0],buffer,sizeof(buffer));
     
    //   if(size>0)
    //   {
    //    buffer[size]='\0';
    //    cout << "father get a message[" << getpid() << "]# " << buffer<<endl;
    //  }
    //   else if(size==0)
    //   {
    //     cout<<"已经读完了"<<endl;
    //   }
      
    //  close(pipeid[0]);//关闭读端
     int status=0;
     waitpid(pid,&status,0);
     printf("子进程的 退出码：%d  退出信号：%d\n",(status>>8)&0xFF,status&0x7F);
    }

    return 0;
}
